/**
* 版权所有：福建邮科电信业务部厦门研发中心 
*====================================================
* 文件名称: Struts2BaseAction.java
* 修订记录：
* No    日期				作者(操作:具体内容)
* 1.    Jun 16, 2012			詹保山(softzbs@126.com)(创建:创建文件)
*====================================================
* 类描述：(说明未实现或其它不应生成javadoc的内容)
* 
*/
package com.devframe.web;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.devframe.sys.util.page.PageInfo;
import com.devframe.sysconfig.storage.operate.ReaderCacheData;
import com.devframe.web.interceptors.InterceptAble;
import com.devframe.web.interceptors.MyInterceptorStack;
import com.devframe.web.util.json.JsonWapper;
import com.devframe.web.util.json.JsonWapper.ListJsonWapper;
import com.devframe.web.util.json.JsonWapper.MapJsonWapper;
import com.devframe.web.util.json.JsonWapper.ObjectJsonWapper;
import com.devframe.web.util.json.MyMapResult;
import com.opensymphony.xwork2.ActionSupport;

/**
 *<pre><b><font color="blue">Struts2BaseAction</font></b></pre>
 *
 *<pre><b>&nbsp;--描述说明--</b></pre>
 * <pre></pre>
 * <pre>
 * <b>--样例--</b>
 *   Struts2BaseAction obj = new Struts2BaseAction();
 *   obj.method();
 * </pre>
 */

public class Struts2BaseAction extends ActionSupport implements MyAction,InterceptAble {
	 /**
     * logger，日志输出，可以由子类使用。
     */
    protected Logger logger = Logger.getLogger(getClass());

    /**
     * context 上下文对象，由框架注入。不绑定web环境，方便测试。
     */
    protected MyContext context;

    /**
     * pageInfo 分页数据交互对象
     */
    protected PageInfo pageInfo = new PageInfo();

    
    
	private ReaderCacheData readerCacheData;
	  /**
     * getPageInfo
     * 
     * @return PageInfo
     * 
     */
    public PageInfo getPageInfo() {
        return pageInfo;
    }

    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }
    /**
     * interceptorStack 拦截栈，可配置
     */
    private MyInterceptorStack interceptorStack;
    /**
     * setContext 注入上下文对象
     * 
     * @param context
     *            上下文对象
     * 
     */
    public void setContext(MyContext context) {
        this.context = context;
    }
    public MyContext getContext() {
        return context;
    }

	
	  /**
     * 判断字符串是否为空
     * 
     * @param obj
     *            obj
     * @return boolean
     */
    public boolean isEmpty(String obj) {
        return obj == null || obj.equals("");
    }

    /**
     * 判断字符串是否为空
     * 
     * @param obj
     *            obj
     * @return boolean
     */
    public boolean notEmpty(String obj) {
        return !isEmpty(obj);
    }

    /**
     * 空值替换
     * 
     * @param obj
     *            obj
     * @param value
     *            value
     * @return String
     * @author:
     */
    public String nvl(String obj, String value) {
        if (isEmpty(obj)) {
            return value;
        }
        return obj;
    }

    /**
     * 空值替换
     * 
     * @param obj
     *            obj
     * @param value
     *            value
     * @return Integer
     * @author:
     */
    public Integer nvl(Integer obj, Integer value) {
        if (obj == null) {
            return value;
        }
        return obj;
    }

    /**
     * 连接请求参数串
     * getParamStr
     * @return 参数串
     * 
     */
    public String getParamStr(String excludeParams){
        StringBuffer paramsStr= new StringBuffer();
        String excludeParamStr = ","+excludeParams+",";
        Enumeration<String> paramNames = context.getParameterNames();
        if(paramNames!=null){
            while (paramNames.hasMoreElements()){
                String pName = paramNames.nextElement();
                if(excludeParamStr.contains(","+pName+",")){
                    continue;
                }
                if(paramsStr.length()>0){
                    paramsStr.append("&");
                }
                paramsStr.append(pName).append("=").append(context.getParameter(pName));
            }
        }
        return paramsStr.toString();
    }

	public MyInterceptorStack getInterceptorStack() {
		return interceptorStack;
	}
    /**
     * setInterceptorStack
     * 此类中为默认的拦截栈，如果已经存在则不覆盖
     * @param interceptorStack interceptorStack
     * 
     */
    public void setInterceptorStack(MyInterceptorStack interceptorStack) {
        if(this.interceptorStack==null){
            this.interceptorStack = interceptorStack;
        }
    }

	

	
	
	protected MyMapResult printMapResult(boolean flag){
		return new MyMapResult(flag);
	}
	protected MyMapResult printMapSuccessResult(){
		return printMapResult(true);
	}
	protected MyMapResult printMapErrorResult(){
		return printMapResult(false);
	}

	public ReaderCacheData getReaderCacheData() {
		return readerCacheData;
	}

	public void setReaderCacheData(ReaderCacheData readerCacheData) {
		this.readerCacheData = readerCacheData;
	}
	
	
//	/**
//	 * 
//	 * <pre><b>&nbsp;描述说明：将MAP转为JSON并输出到客户端</b></pre>
//	 * @author  <b>詹保山(softzbs@126.com)</b>
//	 * @return
//	 */
//	protected MapJsonWapper printMapToJson() {
//		return  JsonWapper.newMapWapper(ServletActionContext.getRequest(), ServletActionContext.getResponse());
//	}
//	/**
//	 * 
//	 * <pre><b>&nbsp;描述说明：将LIST转为JSON并输出到客户端</b></pre>
//	 * @author  <b>詹保山(softzbs@126.com)</b>
//	 * @return
//	 */
//	protected ListJsonWapper printListToJson() {
//		return  JsonWapper.newListWapper(ServletActionContext.getRequest(), ServletActionContext.getResponse());
//	}
//	/**
//	 * 
//	 * <pre><b>&nbsp;描述说明：将Object转为JSON并输出到客户端</b></pre>
//	 * @author  <b>詹保山(softzbs@126.com)</b>
//	 * @return
//	 */
//	protected ObjectJsonWapper printObjectToJson() {
//		return  JsonWapper.newObjectWapper(ServletActionContext.getRequest(), ServletActionContext.getResponse());
//	}

}
